package br.com.iswe.gerador.velocity.gerador.gwt;

import org.apache.velocity.VelocityContext;

import br.com.iswe.gerador.velocity.gerador.GeradorGenerico;
import br.com.iswe.gerador.velocity.gerador.GeradorHandler;
import br.com.iswe.gerador.velocity.info.InfoEntidadeImpl;
import br.com.iswe.gerador.velocity.info.InfoGerador;
import br.com.iswe.gerador.velocity.patterns.GwtPattern;

public class GeradorListaManyToManyPanel extends GeradorGenerico {
	
	public static final String NOME_GERADOR = "geradorListaManyToManyPanel";
	private static final String GERADOR_GWT_PASTA_SAIDA = "gerador.gwt.pasta.saida";
	
	GwtPattern gwtPattern = new GwtPattern();
	
	@Override
	protected VelocityContext buildContext(InfoGerador infoGerador) {
		
		//Configura alguns parametros
		InfoEntidadeImpl infoEntidadeRef = (InfoEntidadeImpl)getParametro("InfoEntidadePath");
		if(infoEntidadeRef == null){
			infoEntidadeRef = (InfoEntidadeImpl)getParametro("InfoEntidadeRef");
			setParametro("InfoEntidadePath", infoEntidadeRef);
		}
		
		return super.buildContext(infoGerador);
	}
	
	@Override
	public void gerarCodigo(InfoEntidadeImpl infoEntidade) throws Exception {
		//ignora a verifica se geracao de entidade duplicada
		getListaEntidades().clear();
		super.gerarCodigo(infoEntidade);
	}
	
	public GeradorListaManyToManyPanel() {
		this.templateName = "GWT-MANY-TO-MANY.vm";
		this.handler = new GeradorHandler(){
			public String getNomeArquivo(InfoEntidadeImpl infoEntidade) {
				//String prefixo = (String)getParametro("Prefixo");
				return gwtPattern.getListaManyToManyName(infoEntidade) + ".java";
			}
			public String getPackageObjeto(InfoEntidadeImpl infoEntidade) {
				InfoEntidadeImpl infoEntidadeRef = (InfoEntidadeImpl)getParametro("InfoEntidadePath");
				return gwtPattern.getPackage(infoEntidadeRef) + ".client";
			}
			public boolean shouldGenerateFile(InfoGerador infoGerador, String arquivo) {
				boolean flag = infoGerador.shouldGenerateFile(arquivo, "gwt");
				return flag;
			}
		};
	}
	
	@Override
	public void inicio(InfoGerador infoGerador) {
		super.inicio(infoGerador);
		this.pastaSaida = infoGerador.getPropriedade(GERADOR_GWT_PASTA_SAIDA);
	}
}
